package yanjunwei.rbac.service.array;

import yanjunwei.rbac.domain.dto.BaseDto;

import yanjunwei.rbac.domain.entity.BaseEntity;


import yanjunwei.rbac.domain.vo.BaseVo;

import yanjunwei.rbac.domain.vo.Result;

import yanjunwei.rbac.service.IBaseService;

import java.util.Arrays;

@Deprecated
abstract class  BaseService <
        Entity extends BaseEntity,
        Dto extends BaseDto,
        Vo extends BaseVo
        >implements IBaseService<Entity,Dto> {

    static final int DATA_SIZE = 100;
    Entity[] data;

    Vo [] temp;
    private int idCounter = 1;

    @Override
    public boolean existsById(int id) {

        return id>=1&&id<idCounter&&data[id]!=null;
    }

    @Override
    public Entity findById(int id) {
        if (existsById(id)){
            return data[id];
        }
        return null;
    }

    abstract Vo convertToVo(Entity entity);



    @Override
    public Result list() {

        int length=0;
        for(int i=1;i<idCounter;i++){
            if (data[i]!=null){
                temp[length++]=convertToVo(data[i]);
            }
        }
        return Result.success("查询成功", Arrays.copyOf(temp,length));
    }

    abstract Entity createEntity(Dto dto,int id);

    @Override
    public Result create(Dto dto) {

            if(idCounter>DATA_SIZE){
                return Result.failure("创建失败，超出存储容量");
            }

             Entity entity=createEntity(dto,idCounter++);
            data[entity.getId()]=entity;
            return Result.success("创建成功",null);


    }

    abstract void updateEntity(Dto dto,Entity entity);

    @Override
    public Result update(Dto dto, int id) {
        if (!existsById(id)){

            return Result.failure("更新失败，不存在该数据");
        }
        Entity entity=data[id];
        updateEntity(dto,entity);

        return Result.success("更新成功",null);
    }
}
